package com.cencat.common.enums;

/**
 * 性别枚举
 * 
 * @author cencat
 * @since 2024-01-01
 */
public enum Gender {

    /**
     * 未知
     */
    UNKNOWN(0, "未知"),

    /**
     * 男
     */
    MALE(1, "男"),

    /**
     * 女
     */
    FEMALE(2, "女");

    /**
     * 性别码
     */
    private final Integer code;

    /**
     * 性别描述
     */
    private final String description;

    /**
     * 构造函数
     * 
     * @param code 性别码
     * @param description 性别描述
     */
    Gender(Integer code, String description) {
        this.code = code;
        this.description = description;
    }

    /**
     * 获取性别码
     * 
     * @return 性别码
     */
    public Integer getCode() {
        return code;
    }

    /**
     * 获取性别描述
     * 
     * @return 性别描述
     */
    public String getDescription() {
        return description;
    }

    /**
     * 根据性别码获取枚举
     * 
     * @param code 性别码
     * @return 性别枚举
     */
    public static Gender getByCode(Integer code) {
        if (code == null) {
            return UNKNOWN;
        }
        for (Gender gender : Gender.values()) {
            if (gender.getCode().equals(code)) {
                return gender;
            }
        }
        return UNKNOWN;
    }

    /**
     * 判断是否为男性
     * 
     * @return 是否为男性
     */
    public boolean isMale() {
        return this == MALE;
    }

    /**
     * 判断是否为女性
     * 
     * @return 是否为女性
     */
    public boolean isFemale() {
        return this == FEMALE;
    }

    /**
     * 判断是否未知
     * 
     * @return 是否未知
     */
    public boolean isUnknown() {
        return this == UNKNOWN;
    }
}